#ifndef FACTORY_H
#define FACTORY_H

#include <iostream>

using namespace std;

class Product
{
public:
    virtual ~Product();

protected:
    Product();
};

class ConcreteProduct : public Product
{
public:
    ~ConcreteProduct();
    ConcreteProduct();
};


class Factory
{
protected:
    Factory();

public:
    virtual ~Factory() = 0;
    virtual Product *CreateProduct() = 0;

};

class ConcreteFactory : public Factory
{
public:
    ConcreteFactory();
    virtual ~ConcreteFactory();
    Product *CreateProduct();
};

#endif // FACTORY_H
